package com.haidong.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//@Setter
//@Getter
//@ToString
//@EqualsAndHashCode
@Data // 这个注解相当于上面几个注解之和
@AllArgsConstructor
@NoArgsConstructor
//@TableName("tbl_user")
public class User {
    /**
     * * NONE: 不设置id生成策略
     * * INPUT:用户手工输入id
     * * ASSIGN_ID:雪花算法生成id(可兼容数值型与字符串型)
     * * ASSIGN_UUID:以UUID生成算法作为id生成策略
     * * 其他的几个策略均已过时，都将被ASSIGN_ID和ASSIGN_UUID代替掉。
     * * NONE: 不设置id生成策略，MP不自动生成，约等于INPUT,
     * 所以这两种方式都需要用户手动设置，但是手动设置第一个问题是容易出现相同的ID造成主键冲突，为了保证主键不冲突就需要做很多判定，实现起来比较复杂
     * * AUTO:数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用
     * * ASSIGN_UUID:可以在分布式的情况下使用，而且能够保证唯一，
     * 但是生成的主键是32位的字符串，长度过长占用空间而且还不能排序，查询性能也慢
     * * ASSIGN_ID:可以在分布式的情况下使用，生成的是Long类型的数字，可以排序性能也高，
     * 但是生成的策略和服务器时间有关，如果修改了系统时间就有可能导致出现重复主键
     */
//    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String name;
    @TableField(value = "psw",select = false) // 匹配数据库和服务器的命名不同并屏蔽密码的查询,防止密码被随意发送到前端
    private String password;
    private Integer age;
    private String tel;
    @TableLogic(value = "0",delval = "1")  // value为正常数据的值,delval为删除后的值
    private Integer online;
    @TableField(exist = false) // 使用注解标记数据库中没有的字段,就不会出现封装问题
    private Integer flag; // 用来标记该条数据是否在数据库中出现
    @Version
    private Integer version;
}
